package com.youpingou.controller;

import com.alibaba.fastjson.JSON;
import com.youpingou.client.CartClient;
import com.youpingou.domain.Cart;
import com.youpingou.domain.User;
import com.youpingou.service.AuthService;
import com.youpingou.util.JWTUtil;
import com.youpingou.vo.BaseResult;
import com.youpingou.vo.LoginResult;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;

/**
 * 这个控制里面主要写的是登录方法，是给页面调用
 *
 */
@RestController
@RequestMapping
public class AuthController {

    @Autowired
    private AuthService authService;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private CartClient cartClient;


    @PostMapping("/login")
    public LoginResult login(@RequestBody User user){
        //0 验证Code
        String redisCode = stringRedisTemplate.opsForValue().get("login" + user.getMobile());
        if (!(redisCode!=null&&!redisCode.equals(user.getCode()))){
            return new LoginResult(1, "失败", null,null, null);
        }


        // 需要调用其他的微服务处理登录，此处直接调用Service，由service发起远程调用
        //1 调用Service查找用户
        User dbUser = authService.findUserByMobile(user);
        //2 判断用户信息是否找到了
        if(dbUser==null||dbUser.getId()==-100){
            // 查找失败
            return LoginResult.error("用户未找到");
        }
        //3 用户肯定查找到了
        // 根据私钥生成token，组装返回结果

        // 第一个参数：userInfo
        // 第二个参数：私钥
        // 第三个参数：存活时间
        String token = null;
        try {
            token = JWTUtil.createToken(dbUser.getId(), "admin", 30);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //发起远程调用
        String cart = user.getCart();
        if (StringUtils.isNotBlank(cart)){
            //调用Feign
            cartClient.addLoginCart(dbUser.getId(),cart);
        }



        //移除redisCode
        stringRedisTemplate.delete("login"+user.getMobile());
        // 组装返回结果  Integer code, String message, Object data, String token, String name
        LoginResult lr = new LoginResult(0, "成功", null,token, dbUser.getName());
        return lr;
    }


}